<?php

namespace App\Http\Controllers\Admin;

use App\Models\Admin\AdminPermission;
use App\Models\Admin\AdminRole;
use App\Models\Admin\AdminRolePermission;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class AdminRoleController extends Controller
{
    //后台角色视图
    public function index(){
        //group_concat()函数
        //该函数返回带有来自一个组的连接的非NULL值的字符串结果
       $roles = AdminRole::select(DB::Raw('admin_roles.*,GROUP_CONCAT(admin_permissions.name) as dname'))
            ->leftJoin('admin_role_permission', 'admin_role_permission.role_id', 'admin_roles.id')
            ->leftJoin('admin_permissions', 'admin_permissions.id', 'admin_role_permission.permission_id')
            ->groupBy('admin_roles.id')
            ->get();
//       dd($roles);
        return view('admin/admin_role')
            ->with('roles', $roles);
    }
    //后台的角色添加
    public function create(){
        //查询所有的权限，填充到 角色拥有的权限
        $permissions = AdminPermission::all();
        //调用自定义的函数（树状结构）
        $permissions = (object)getTree($permissions);
        //将数据添加到  角色的  显示列表
        return view('admin.admin_role_create')->with('permissions', $permissions);
    }
    //后台的角色提交数据库
    public function store(Request $request){
        //insertGetId()返回上一条插入数据库的ID
        $id = AdminRole::insertGetId([
            'name' => $request->get('name'),
            'display_name' => $request->get('display_name'),
            'description' => $request->get('description')
        ]);
        //字符串的遍历，将ID储存在中间表，将添加的数据传递到对应的权限表与角色表中
        //得到一个数组用来遍历，
        foreach ($request->get('role_id') as $value) {
            AdminRolePermission::insert(
                [
                    //值
                    'permission_id' => $value,
                    //键
                    'role_id' => $id,
                ]
            );
        }
        return redirect('/admin/admin_role');
    }
    //后台角色的修改页面
    public function edit($id){
        //查询当前角色信息和当前用户的权限id
        $role = AdminRole::find($id);
        //转为字符串
        $permission_id = AdminRolePermission::select('permission_id')->where('role_id', $id)->get()->toArray();
        //查询所有的权限
        //转为一维数组
        $per_ids = array();
        foreach ($permission_id as $v) {
            $per_ids[] = $v['permission_id'];
        }
        $permissions = AdminPermission::all();
        $permissions = (object)getTree($permissions);
        //dd($permissions);
        return view('admin.admin_role_edit')
            ->with('permissions' ,$permissions)
            ->with('role' ,$role)
            ->with('per_ids' ,$per_ids);
    }
    //后台角色修改后提交数据库
    public function update(Request $request,$id){
        //修改角色信息
        $role = AdminRole::find($id);
        $role->name = $request->get('name');
        $role->display_name = $request->get('display_name');
        $role->description = $request->get('description');
        $role->save();
        //修改权限
        //现将权限删除在添加
        AdminRolePermission::where('role_id', $id)->delete();
        //循环添加权限
        foreach ($request->get('permission_id') as $value) {
            AdminRolePermission::insert(
                [
                    'permission_id' => $value,
                    'role_id' => $id,
                ]
            );
        }
        return redirect('/admin/admin_role');
    }
    //删除后台的角色列表中的一条信息
    public function destroy(Request $request,$id){
        //删除角色表中的数据
        $role = AdminRole::find($id);

        //再将权限表中的数据删除
        AdminRolePermission::where('role_id', $id)->delete();

        if($role->delete()){
            return redirect('admin/admin_role')->with('success','删除成功'.$id);
        }else{
            return redirect('admin/admin_role')->with('fails','删除失败'.$id);
        }

    }
}
